#ifndef _COMMON_H_
#define _COMMON_H_

typedef signed char sint8;
typedef signed short sint16;
typedef signed int sint32;

typedef unsigned char uint8;
typedef unsigned short uint16;
typedef unsigned int uint32;

//版本号结构
typedef struct 
{
	uint8 sub_ver;//最小版本号
	uint8 sec_ver;//次版本号
	uint8 pri_ver;//主版本号
	uint8 hour;//版本修改时间
	uint8 day;//日期
	uint8 month;//月份
	uint16 year;//年
}version_s;


//各个模块ID标识(component)
typedef enum
{
	COM_COMMON=0,
	COM_MAIN,
	COM_PYPARSE,
	COM_IMCORE,
	COM_PINYIN,
	COM_XIM,
	COM_CONFIG,
	COM_THEME,
	COM_TOOLS,
	COM_UTILS,
}COMPONENT_E;

//各个模块句柄(handle)
typedef struct
{
	sint32 com_common;
	sint32 com_main;
	sint32 com_pyparse;
	sint32 com_imcore;
	sint32 com_pinyin;
	sint32 com_xim;
	sint32 com_config;
	sint32 com_theme;
	sint32 com_tools;
	sint32 com_utils;
}com_handle_s;

/**
*	@理论上头文件应该严格限制全局变量的使用,但为方便模块管理,这里定义一个模块外全局变量(弱符号类型)
*	@该变量统一管理各模块句柄
*/
com_handle_s pro_handle;

/**
*	@错误号管理原则:错误号最高位(第31位)为 1,标识错误为负数,第16位到30位为模块ID号,第0位到15位为各模块的错误号.
*	@
*/
#define ERRNO(errno,id) (errno | id << 16 | 1 << 31)

/**
*	@主版本号在这里定义
*	@如果需要打开所有打印信息,定义DEBUG_ALL,当模块打印,在每个模块定义DEBUG
*/
#define T3IM_VERSION {1,1,0,0,12,10,2010}
//#define DEBUG_ALL

#endif //_COMMON_H_



